package com.xbongbong.paas.model;

import com.xbongbong.paas.domain.entity.PaasProcessTemplateEntity;
import com.xbongbong.paas.domain.entity.ext.PaasFormDataEntityExt;
import com.xbongbong.paas.domain.entity.ext.PaasProcessTemplateEntityExt;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.UserVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * PAAS 流程设计类
 *
 * @author wufeng
 * @time 2018-8-8 9:47
 */
public interface PaasProcessTemplateModel {

    /**
     * 插入实体
     *
     * @param entity 实体
     *
     * @return Integer MyBatis操作结果 1：成功
     */
    Integer insert(PaasProcessTemplateEntity entity);

    /**
     *  查询列表
     * @author wufeng
     * @date 2018/8/13 16:07
     * @param entity
     * @descption
     * @return java.util.List<ApplicationListVO>
     */
    List<PaasProcessTemplateEntityExt> list(Map<String, Object> entity);

    /**
     * 查询实体
     * @param key
     * @param corpid
     * @return
     */
    PaasProcessTemplateEntityExt getByKey(Long key, String corpid);
    /**
     *  查询列表数量
     * @author wufeng
     * @date 2018/8/13 16:07
     * @param entity
     * @descption
     * @return Integer
     */
    Integer getEntitysCount(Map<String, Object> entity);

    /**
     * 删除实体
     * @author wufeng
     * @date 2018/8/6 17:18
     * @param entity 实体
     * @descption
     * @return java.lang.Integer  mybatis操作结果，1：成功
     */
    Integer delete(PaasProcessTemplateEntity entity);



    /**
     *  更新名字
     * @author wufeng
     * @date 2018/8/13 10:19
     * @param entity
     * @descption
     * @return java.lang.Integer
     */
    Integer update(PaasProcessTemplateEntity entity);


    /**
     * 获取流程审批通过后，是否允许编辑(超管或老板返回true)
     * @param appId 应用id
     * @param menuId 菜单id
     * @param formId 表单id
     * @param loginUser 当前登录用户
     * @return 是否允许编辑
     */
    boolean getEditAfterFinished(Long appId, Long menuId, Long formId, UserVO loginUser);

    /**
     * Description: 获取某个应用下的流程审批通过后，是否允许编辑(超管或老板返回true)
     * @param appId
     * @param menuId
     * @param loginUser
     * @return java.util.Map<java.lang.Long,java.lang.Boolean>
     * @author 魏荣杰
     * @date 2020/3/9 2:25 下午
     */
    Map<Long, Boolean> getEditAfterFinishedMap(String corpid, Long appId, Long menuId, UserVO loginUser);

    /**
     * 获取该表单是否可以编辑
     * @param appId 应用id
     * @param menuId 菜单id
     * @param formId 表单id
     * @param loginUser 当前用户
     * @param formData 表单数据
     * @return 是否可以编辑
     */
    boolean isApprovedEdit(Long appId, Long menuId, Long formId, UserVO loginUser, PaasFormDataEntityExt formData);

    /**
     * 获取该表单是否可以编辑
     * @param appId 应用id
     * @param menuId 菜单id
     * @param formId 表单id
     * @param loginUser 当前用户
     * @param flowStatus 表单数据审批状态
     * @return 是否可以编辑
     */
    boolean isApprovedEdit(Long appId, Long menuId, Long formId, UserVO loginUser, Integer flowStatus);

    /**
     * 获取该表单是否可以编辑
     * @param editAfterFinished 审批通过后，是否允许编辑
     * @param formData 表单数据
     * @return 是否可以编辑
     */
    boolean isApprovedEdit(boolean editAfterFinished, PaasFormDataEntityExt formData);

    /**
     * 检查审批通过后是否能编辑
     * @param editAfterFinished 审批后是否能编辑
     * @param list 数据列表
     * @throws XbbException xbb异常（不允许会抛异常）
     */
    void checkEditAfterFinished(boolean editAfterFinished, List<PaasFormDataEntityExt> list) throws XbbException;

    /**
     * Description: 检查审批通过后是否能编辑
     * @param editAfterFinishedMap
     * @param list
     * @return void
     * @author 魏荣杰
     * @date 2020/3/9 2:50 下午
     */
    void checkEditAfterFinished(Map<Long, Boolean> editAfterFinishedMap, List<PaasFormDataEntityExt> list) throws XbbException;

    /**
     * 根据表单id删除数据
     * @param formId
     * @param corpid
     * @return
     */
    Integer deleteByFormId(@Param("formId") Long formId, @Param("corpid") String corpid);

    Integer enable(List<Long> enableList, String corpid, int enable);
}
